package br.com.usjt.sge.veiculo;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.com.usjt.sge.usuario.Usuario;
import br.com.usjt.sge.usuario.UsuarioDAOHibernate;

/**
 * Classe de implementacao da interface VeiculoDAO
 * @author cicero
 *
 */
public class VeiculoDAOHibernate implements VeiculoDAO {
	
	private static final Logger logger = Logger.getLogger(UsuarioDAOHibernate.class.getName());
	private Session session;
	
	public void setSession(Session session) {
		
		this.session = session;
				
	}
	
	@Override
	public void salvar(Veiculo veiculo) {
		
		this.session.save(veiculo);
		logger.info("veiculo salvo na base");

	}

	@Override
	public void atualizar(Veiculo veiculo) {
		
		this.session.update(veiculo);
		logger.info("veiculo alterado da base");
		
	}

	@Override
	public void excluir(Veiculo veiculo) {
		
		this.session.delete(veiculo);
		logger.info("veiculo excluido da base");
		
	}

	@Override
	public Veiculo carregar(Integer codigo) {
		
		return (Veiculo) this.session.get(Veiculo.class, codigo);
	}

	@Override
	public List<Veiculo> lista(Usuario usuario) {
		
		Criteria criteria  = this.session.createCriteria(Veiculo.class);
		criteria.add(Restrictions.eq("usuario", usuario));
		return criteria.list();
	
	}

	@Override
	public Veiculo buscarPorUsuario(Integer codUsuario) {
		
		String hql = "select v from Veiculo v where v.codigo = :codigoUsuario";
		Query consulta = this.session.createQuery(hql);
		consulta.setInteger("codigoUsuario", codUsuario);
		
		return (Veiculo) consulta.uniqueResult();
	}

}
